/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cafeinatpv;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import java.text.DecimalFormat;

/**
 *
 * @author kitiara
 */
public final class PagoCliente {

    String tipoCliente;
    Float totalPrimero;
    Float totalImpuestos;
    Float descontado;
    Float totalFinal;
    Float ingresadoPorCliente;
    Float porcentajeDescuentoAcumulado;
    float ingresado;
    Ticket tic;

    public PagoCliente(String TipoCliente, Ticket tick,
            DescuentosAplicables descAp, CompositeDescuento descuentos,
            CalculadoraImpuestos calculadora) throws MalformedURLException, IOException, SAXException, ParserConfigurationException {

        tic = tick;
        

        if (!tic.cancelado) {

            totalPrimero = obtenTotalPrimero(tic);
            //System.out.println("Total primero: "+totalPrimero);

            porcentajeDescuentoAcumulado = obtenDescuento(descuentos, descAp);
            //System.out.println(" porcentajeDescuentoAcumulado: "+porcentajeDescuentoAcumulado);

            
            descontado = totalPrimero * porcentajeDescuentoAcumulado / 100F;
            //System.out.println(" descontado: "+descontado);

            totalImpuestos = obtenImpuestos(tic, calculadora);
            //System.out.println(" totalImpuestos: "+totalImpuestos);

            totalFinal = obtenTotalFinal();
            //System.out.println(" totalFinal: "+totalFinal);
        }
    }

    float obtenTotalPrimero(Ticket tic) {
        float resultado = 0;

        for (int i = 0; i < tic.lineas.size(); i++) {
            resultado += tic.lineas.get(i).precioLineaConDesc;
        }

        return resultado;
    }

    float obtenImpuestos(Ticket tic, CalculadoraImpuestos calc) throws MalformedURLException, IOException, SAXException, ParserConfigurationException {
        float resultado = 0;
        ArrayList<Impuesto> impuestos;
        float porcentaje = 0F, impuesto;
        float precio;

        for (int i = 0; i < tic.lineas.size(); i++) {

             System.out.print("\nLinea "+ i+" :\nimpuestos:\t");
            // Conseguir el arrayList de impuestos para la linea
            impuestos = calc.calculaImpuesto(tic.lineas.get(i).codigo);
            // sumamos los impuestos del array
            for (int j = 0; j < impuestos.size(); j++) {
                porcentaje += impuestos.get(j).porcentaje;
                System.out.print(impuestos.get(j).porcentaje+"\t");
                
            }
            System.out.println("\tPorcentaje acumulado:\t"+ porcentaje);
            // Aplicamos el porcentaje a la linea y acumulamos
            precio = tic.lineas.get(i).precioFin;
            System.out.println("precioFin:\t"+ precio);
            impuesto = precio * porcentaje / 100F;
           System.out.println("Impuesto cargado (precio*porcentaje/100:\t"+ impuesto);
            porcentaje = 0;
            resultado += impuesto;
        }
        System.out.println("Impuesto FINAL: "+ resultado);

        return resultado;
    }

    Float obtenDescuento(CompositeDescuento descuentos, DescuentosAplicables dAp) {
        Float porcentaje;
        if (dAp.politicaAplicable.equals("ACUMULABLE")) {
            porcentaje = descuentos.obtenerDescuento(tic.venta);
        } else {
            porcentaje = descuentos.maxDescuento(tic.venta).obtenerDescuento(tic.venta);
                        
        }
        return porcentaje;
    }

    Float obtenTotalFinal() {
        return totalPrimero - descontado;
    }

    float devolucion(float ingresado) {
        this.ingresado = ingresado;
        return (ingresado - obtenTotalFinal());
    }

    void imprimirTicket(Float ingreso, String nombreFicSal) throws IOException {
        PrintWriter salida = new PrintWriter(new BufferedWriter(new FileWriter(nombreFicSal)));
        DecimalFormat formateador = new DecimalFormat("####.00");

        if (!tic.cancelado) {
            salida.println("<ticket>");
            if (!tic.esVacio()) {
                for (int i = 0; i < tic.lineas.size(); i++) {
                    salida.println("\t<linTicket>");


                    salida.println((tic.lineas.get(i)).toString());
                    salida.println("\t</linTicket>");
                }
                salida.println("\t<totalAPagar cant=\"" + formateador.format(totalFinal) + "\"/>");
                salida.println("\t<dctoAcumulado cant=\"" + formateador.format(descontado) + "\"/>");
                salida.println("\t<impuestos cant=\"" + formateador.format(totalImpuestos) + "\"/>");
            }
            salida.println("</ticket>");
        }
        salida.close();
    }
}
